# -*- coding: utf-8 -*-
"""
@Time    : 2024/7/5 15:40 
@Author  : ZhangShenao 
@File    : basic.py 
@Desc    : lambda表达式(匿名函数)
lambda表达式,也叫匿名函数,是一种简洁的函数定义方式,通常用于简单的函数定义,例如作为函数的参数传递
lambda表达式的语法为: lambda 参数列表: 表达式

和普通函数一样,lambda表达式返回的也是一个函数对象(function object)

lambda是一个表达式(expression),而并不是一个语句(statement)

lambda 的主体是只有一行的简单表达式，并不能扩展成一个多行的代码块
Python之所以发明lambda,就是为了让它和常规函数各司其职:lambda 专注于简单的任务,而常规函数则负责更复杂的多行逻辑

合理使用lambda表达式,可以帮助我们大大简化代码的复杂度,提升代码的可读性
"""

# 通过lambda表达式定义平方函数
squa = lambda x: x ** 2
print(squa(3))  # 9

# lambda表达式可以用在列表生成式中
square_list = [(lambda x: x ** 2)(x) for x in range(10)]
print(square_list)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81])

# lambda表达式可以作为函数的参数传递
words = {'a': 1, 'd': 4, 'e': 5, 'b': 2, 'c': 3}
# 使用lambda表达式作为排序的参数
sorted_words = sorted(words.items(), key=lambda x: x[0])
print(sorted_words)  # [('a', 1), ('b', 2), ('c', 3), ('d', 4), ('e', 5)]

# 内置函数map(function, iterable),作用是将iterable可迭代对象中的每一个元素,都应用一次function函数,并且返回一个新的Iterable对象
# map( 函数直接由C语言写的,运行时不需要通过Python解释器间接调用,并且内部做了诸多优化,所以运行速度最快
two_times_upper = map(lambda x: x.upper() * 2, 'abced')
print(''.join(two_times_upper))  # ['AA', 'BB', 'CC', 'DD', 'EE'])  # AABBCCEEDD
